
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package itm.bo.administracion;

//~--- non-JDK imports --------------------------------------------------------
import itm.conexion.SQLServerConection;

import itm.dao.administracion.IndicadorDAO;

import itm.exception.ControlException;

import itm.exception.DAOException;
import itm.exception.IndicadoresException;
import itm.vo.administracion.EtiquetaVO;
import itm.vo.administracion.IndicadoresVO;

//~--- JDK imports ------------------------------------------------------------

import java.sql.Connection;
import java.sql.SQLException;

import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author BISA20
 */
public class IndicadoresBO {

    String temp = "";
    SQLServerConection conexion = new SQLServerConection();
    Connection dbConexion;
    IndicadorDAO indicadorDAO;

    public String crearItemProyecto(IndicadoresVO indicadoresVO) throws ControlException {
        String aux = "";

        try {
            dbConexion = conexion.openConnection();
            indicadorDAO = new IndicadorDAO(dbConexion);
            aux = indicadorDAO.crearItemProyecto(indicadoresVO);
        } catch (SQLException ce) {
            ce.printStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return aux;
    }

    public String crearItemProducto(IndicadoresVO indicadoresVO) throws ControlException {
        String aux = "";

        try {
            dbConexion = conexion.openConnection();
            indicadorDAO = new IndicadorDAO(dbConexion);
            aux = indicadorDAO.crearItemProducto(indicadoresVO);
        } catch (SQLException ce) {
            ce.printStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return aux;
    }

    public List<IndicadoresVO> listarIndicadores() throws Exception {
        List<IndicadoresVO> listaIndicadores = new ArrayList<IndicadoresVO>();

        try {
            dbConexion = conexion.openConnection();
            indicadorDAO = new IndicadorDAO(dbConexion);
            listaIndicadores = indicadorDAO.listarIndicadores();
        } catch (Exception e) {
            e.getStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return listaIndicadores;
    }

    public List<IndicadoresVO> listartipoProyecto() throws Exception {
        List<IndicadoresVO> listatipoProyecto = new ArrayList<IndicadoresVO>();

        try {
            dbConexion = conexion.openConnection();
            indicadorDAO = new IndicadorDAO(dbConexion);
            listatipoProyecto = indicadorDAO.listartipoProyecto();
        } catch (Exception e) {
            e.getStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return listatipoProyecto;
    }

    public List<IndicadoresVO> listartipoProducto() throws Exception {
        List<IndicadoresVO> listatipoProducto = new ArrayList<IndicadoresVO>();

        try {
            dbConexion = conexion.openConnection();
            indicadorDAO = new IndicadorDAO(dbConexion);
            listatipoProducto = indicadorDAO.listartipoProductos();
        } catch (Exception e) {
            e.getStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return listatipoProducto;
    }

    public List<IndicadoresVO> consultarIndicadoresProyecto(IndicadoresVO indicadoresVO, long idCategoria) throws ControlException {
        List<IndicadoresVO> listaIndicadores = new ArrayList<IndicadoresVO>();

        try {
            dbConexion = conexion.openConnection();
            indicadorDAO = new IndicadorDAO(dbConexion);
            listaIndicadores = indicadorDAO.consultarProyectos(indicadoresVO, idCategoria);
        } catch (SQLException ex) {
            ex.getStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return listaIndicadores;
    }

    public List<IndicadoresVO> consultarIndicadoresProducto(IndicadoresVO indicadoresVO, long idCriterio) throws ControlException {
        List<IndicadoresVO> listaIndicadoresProducto = new ArrayList<IndicadoresVO>();

        try {
            dbConexion = conexion.openConnection();
            indicadorDAO = new IndicadorDAO(dbConexion);
            listaIndicadoresProducto = indicadorDAO.consultarProductos(indicadoresVO, idCriterio);
        } catch (SQLException ex) {
            ex.getStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return listaIndicadoresProducto;
    }

    public String eliminarItem(IndicadoresVO indicadoresVO) throws ControlException {
        try {
            dbConexion = conexion.openConnection();
            indicadorDAO = new IndicadorDAO(dbConexion);
            temp = indicadorDAO.eliminarItem(indicadoresVO);
        } catch (SQLException ce) {
            ce.printStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return temp;
    }

    public IndicadoresVO consultarItemProyecto(IndicadoresVO indicadoresVO) throws Exception {
        try {
            dbConexion = conexion.openConnection();
            indicadorDAO = new IndicadorDAO(dbConexion);
            indicadoresVO = indicadorDAO.consultarItemProyecto(indicadoresVO);
        } catch (Exception e) {
            e.getStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return indicadoresVO;
    }

    public IndicadoresVO consultarItemProducto(IndicadoresVO indicadoresVO) throws Exception {
        try {
            dbConexion = conexion.openConnection();
            indicadorDAO = new IndicadorDAO(dbConexion);
            indicadoresVO = indicadorDAO.consultarItemProducto(indicadoresVO);
        } catch (Exception e) {
            e.getStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return indicadoresVO;
    }

    public String actalizarProyecto(IndicadoresVO indicadoresVO) throws ControlException {
        try {
            dbConexion = conexion.openConnection();
            indicadorDAO = new IndicadorDAO(dbConexion);
            temp = (String) indicadorDAO.actualizarItemProyecto(indicadoresVO);
        } catch (SQLException ce) {
            ce.printStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return temp;
    }

    public String actalizarProducto(IndicadoresVO indicadoresVO) throws ControlException {
        try {
            dbConexion = conexion.openConnection();
            indicadorDAO = new IndicadorDAO(dbConexion);
            temp = (String) indicadorDAO.actualizarItemProducto(indicadoresVO);
        } catch (SQLException ce) {
            ce.printStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return temp;
    }

    public void crearEtiqueta(String tipoEtiqueta, String nombreEtiqueta) throws IndicadoresException {
        try {
            dbConexion = conexion.openConnection();
            indicadorDAO = new IndicadorDAO(dbConexion);
            indicadorDAO.crearEtiqueta(tipoEtiqueta, nombreEtiqueta);
            conexion.commit();
        } catch (ControlException ex) {
            try {
                Logger.getLogger(IndicadoresBO.class.getName()).log(Level.SEVERE, null, ex);
                conexion.rollback();
                throw new IndicadoresException("Error al hacer commit", ex);
            } catch (ControlException ex1) {
                Logger.getLogger(IndicadoresBO.class.getName()).log(Level.SEVERE, null, ex1);
                throw new IndicadoresException("Error al hacer rollback", ex1);
            }
        } catch (DAOException ex) {
            Logger.getLogger(IndicadoresBO.class.getName()).log(Level.SEVERE, null, ex);
            throw new IndicadoresException("Error: IndicadoresBO:crearEtiqueta", ex);
        }
    }


    public void crearEtiqueta(String tipoEtiqueta, String nombreEtiqueta, double porcentajeEtiqueta) throws IndicadoresException {
        try {
            dbConexion = conexion.openConnection();
            indicadorDAO = new IndicadorDAO(dbConexion);
            indicadorDAO.crearEtiqueta(tipoEtiqueta, nombreEtiqueta, porcentajeEtiqueta);
            conexion.commit();
        } catch (ControlException ex) {
            try {
                Logger.getLogger(IndicadoresBO.class.getName()).log(Level.SEVERE, null, ex);
                conexion.rollback();
                throw new IndicadoresException("Error al hacer commit", ex);
            } catch (ControlException ex1) {
                Logger.getLogger(IndicadoresBO.class.getName()).log(Level.SEVERE, null, ex1);
                throw new IndicadoresException("Error al hacer rollback", ex1);
            }
        } catch (DAOException ex) {
            Logger.getLogger(IndicadoresBO.class.getName()).log(Level.SEVERE, null, ex);
            throw new IndicadoresException("Error: IndicadoresBO:crearEtiqueta", ex);
        }
    }

    public List<EtiquetaVO> listarEtiquetas() throws IndicadoresException {
        List<EtiquetaVO> lista = new ArrayList<EtiquetaVO>();
        try {
            dbConexion = conexion.openConnection();
            indicadorDAO = new IndicadorDAO(dbConexion);
            lista = indicadorDAO.listarEtiquetasRequeridas();
            indicadorDAO.listarEtiquetasOpcionales(lista);
            return lista;
        } catch (DAOException ex) {
            Logger.getLogger(IndicadoresBO.class.getName()).log(Level.SEVERE, null, ex);
            throw new IndicadoresException("Error: IndicadoresBO:listarEtiquetas", ex);
        }
    }

    public void modificarEtiqueta(EtiquetaVO etiqueta) throws IndicadoresException {
        try {
            dbConexion = conexion.openConnection();
            indicadorDAO = new IndicadorDAO(dbConexion);
            indicadorDAO.modificarEtiqueta(etiqueta);
            conexion.commit();
        } catch (ControlException ex) {
            try {
                Logger.getLogger(IndicadoresBO.class.getName()).log(Level.SEVERE, null, ex);
                conexion.rollback();
                throw new IndicadoresException("Error al hacer commit", ex);
            } catch (ControlException ex1) {
                Logger.getLogger(IndicadoresBO.class.getName()).log(Level.SEVERE, null, ex1);
                throw new IndicadoresException("Error al hacer rollback", ex1);
            }
        } catch (DAOException ex) {
            Logger.getLogger(IndicadoresBO.class.getName()).log(Level.SEVERE, null, ex);
            throw new IndicadoresException("Error: IndicadoresBO:modificarEtiqueta", ex);
        }
    }

    public void eliminarEtiqueta(EtiquetaVO etiqueta) throws IndicadoresException {
        try {
            dbConexion = conexion.openConnection();
            indicadorDAO = new IndicadorDAO(dbConexion);
            indicadorDAO.eliminarEtiqueta(etiqueta);
            conexion.commit();
        } catch (ControlException ex) {
            try {
                Logger.getLogger(IndicadoresBO.class.getName()).log(Level.SEVERE, null, ex);
                conexion.rollback();
                throw new IndicadoresException("Error al hacer commit", ex);
            } catch (ControlException ex1) {
                Logger.getLogger(IndicadoresBO.class.getName()).log(Level.SEVERE, null, ex1);
                throw new IndicadoresException("Error al hacer rollback", ex1);
            }
        } catch (DAOException ex) {
            Logger.getLogger(IndicadoresBO.class.getName()).log(Level.SEVERE, null, ex);
            throw new IndicadoresException("Error: IndicadoresBO:eliminarEtiqueta", ex);
        }
    }

     public List<EtiquetaVO> consultarEtiquetas(String tipoEtiqueta) throws IndicadoresException {
        List<EtiquetaVO> lista = new ArrayList<EtiquetaVO>();
        try {
            dbConexion = conexion.openConnection();
            indicadorDAO = new IndicadorDAO(dbConexion);
            lista = indicadorDAO.consultarEtiqueta(tipoEtiqueta);
            return lista;
        } catch (DAOException ex) {
            Logger.getLogger(IndicadoresBO.class.getName()).log(Level.SEVERE, null, ex);
            throw new IndicadoresException("Error: IndicadoresBO:listarEtiquetas", ex);
        }
    }

     public List<EtiquetaVO> consultarEtiquetas(String tipoEtiqueta, String nombreEtiqueta) throws IndicadoresException {
        List<EtiquetaVO> lista = new ArrayList<EtiquetaVO>();
        try {
            dbConexion = conexion.openConnection();
            indicadorDAO = new IndicadorDAO(dbConexion);
            lista = indicadorDAO.consultarEtiqueta(tipoEtiqueta, nombreEtiqueta);
            return lista;
        } catch (DAOException ex) {
            Logger.getLogger(IndicadoresBO.class.getName()).log(Level.SEVERE, null, ex);
            throw new IndicadoresException("Error: IndicadoresBO:listarEtiquetas", ex);
        }
    }



}
